import datetime
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import Client
from helpdesk.models import FollowUp, Queue, Ticket
import uuid


class TimeSpentTestCase(TestCase):
    def setUp(self):
        self.queue_public = Queue.objects.create(
            title="Queue 1",
            slug="q1",
            allow_public_submission=True,
            dedicated_time=datetime.timedelta(minutes=60),
        )

        self.ticket_data = {
            "title": "Test Ticket",
            "description": "Some Test Ticket",
        }

        ticket_data = dict(queue=self.queue_public, **self.ticket_data)
        self.ticket = Ticket.objects.create(**ticket_data)

        self.client = Client()

        user1_kwargs = {
            "username": "staff",
            "email": "staff@example.com",
            "password": make_password("Test1234"),
            "is_staff": True,
            "is_superuser": False,
            "is_active": True,
        }
        self.user = User.objects.create(**user1_kwargs)

    def test_add_followup(self):
        """Tests whether staff can delete tickets"""

        message_id = uuid.uuid4().hex
        followup = FollowUp.objects.create(
            ticket=self.ticket,
            date=datetime.datetime.now(),
            title="Testing followup",
            comment="Testing followup time spent",
            public=True,
            user=self.user,
            new_status=1,
            message_id=message_id,
            time_spent=datetime.timedelta(minutes=30),
        )

        followup.save()

        self.assertEqual(followup.time_spent.seconds, 1800)
        self.assertEqual(self.ticket.time_spent.seconds, 1800)
        self.assertEqual(self.queue_public.time_spent.seconds, 1800)
        self.assertTrue(
            self.queue_public.dedicated_time.seconds
            > self.queue_public.time_spent.seconds
        )
